Dự án Scratch — Lớp 9

Thuật toán bám tường

Program robot tự thoát mê cung bằng quy tắc "luôn giữ một tay chạm tường" — nền tảng thuật toán tìm đường trong Tin học và robotics.

Thuật toán bám tường là gì?

Giả sử bạn đứng trong mê cung tối, chỉ sờ được tường hai bên. Một cách thoát ra là luôn để một tay (trái hoặc phải) chạm tường và bước theo — đó gọi là thuật toán bám tường (wall follower).

Logo Scratch
Dự án lớp 9: robot Scratch tự di chuyển trong mê cung — không điều khiển bằng phím

Trên Scratch, bạn lập trình sprite "robot" tự quyết định rẽ trái, đi thẳng hay quay đầu dựa trên việc có chạm tường phía trước, bên trái hay bên phải — mô phỏng cảm biến robot thật.

Quy tắc tay phải Luôn ưu tiên giữ tường bên phải. Rẽ phải khi được, không thì thẳng, không thì rẽ trái.
Quy tắc tay trái Đối xứng — luôn bám tường bên trái. Chọn một quy tắc và giữ nguyên suốt mê cung.
💡 Ghi nhớ

Thuật toán này đảm bảo tìm lối ra với mê cung "đơn giản liên thông" — mọi tường nối với nhau hoặc với mép ngoài, có một lối vào và một lối ra. Không đổi giữa tay trái và tay phải giữa chừng.

Chuẩn bị mê cung và robot

Thiết kế
  1. Vẽ phông nền mê cung: tường một màu đậm (ví dụ xanh navy), lối đi màu sáng, có cửa vào và vùng đích (màu xanh lá).
  2. Sprite robot nhỏ gọn — hình vuông hoặc mũi tên chỉ hướng. Hướng sprite = hướng "phía trước".
  3. Đặt robot tại cửa vào, hướng vào trong mê cung.
  4. Tường dày, không khe hở — robot không được "lọt" qua.
Nhóm khối Cảm biến
Khối "chạm màu …?" dùng để robot "cảm nhận" tường xung quanh

Cách robot "nhìn" ba phía

Scratch không có cảm biến riêng cho trái/phải/trước. Ta quay robot tạm thời rồi kiểm tra chạm màu tường:

📌 Mẹo: dùng My Block

Tạo khối tường_bên_phải? trả về đúng/sai: quay 90°, nếu chạm màu tường → đúng, quay lại -90°. Tương tự tường_phía_trước?tường_bên_trái? — code gọn, dễ đọc.

⚠️ Lưu ý

Sau mỗi lần quay thử, phải quay về hướng cũ trước khi bước tiếp. Nếu không, robot mất phương hướng.

Logic quy tắc tay phải

Thuật toán

Mỗi bước lặp, robot quyết định theo thứ tự ưu tiên:

  1. Không có tường bên phải → rẽ phải 90°, tiến một bước (ô).
  2. Ngược lại, không có tường phía trước → tiến thẳng một bước.
  3. Ngược lại, có tường trước → rẽ trái 90° (bỏ qua tường trước).
  4. Ngõ cụt (tường trước, trái, phải) → quay 180°.
khi nhận được [bat_dau v]
lặp mãi
  nếu <không <tường_bên_phải?>> thì
    quay [90] độ
    tiến [12] bước
  kết thúc
  nếu không thì
    nếu <không <tường_phía_trước?>> thì
      tiến [12] bước
    kết thúc
    nếu không thì
      quay [-90] độ
    kết thúc
  kết thúc
  đợi [0.1] giây
  nếu <chạm màu [#33cc33]?> thì
    nói [Đã đến đích!] trong [2] giây
    dừng [script này v]
  kết thúc
kết thúc

Số bước 12 căn theo độ rộng lối đi — test để robot không xuyên tường hay kẹt giữa ô.

💡 Quy tắc tay trái

Đảo ưu tiên: kiểm tra trái trước, rẽ trái khi trống; không thì thẳng; không thì rẽ phải. Cùng một mê cung, đường đi có thể khác nhưng vẫn thoát được nếu mê cung hợp lệ.

Triển khai từng bước trên Scratch

Bước 1: Khởi động

khi nhấn cờ xanh
  đi tới x: [-180] y: [120]
  hướng về hướng [90]
  phát thông báo [bat_dau v]

Bước 2: Tốc độ và quan sát

Thêm đợi 0,1 giây mỗi vòng lặp để mắt người xem kịp robot di chuyển. Tắt đợi khi debug logic.

Bước 3: Nút "Chạy thuật toán"

Thay cờ xanh trực tiếp, dùng màn hình tiêu đề + nút "Bắt đầu" phát bat_dau — UX rõ ràng hơn.

Nhóm khối Điều khiển
Vòng lặp mãi chứa logic quyết định mỗi bước của robot

Hạn chế và mở rộng

Khi nào thuật toán thất bại?

📌 So sánh với điều khiển tay

Game mê cung lớp 6: người chơi bấm phím, chạm tường thì lùi. Dự án lớp 9: robot tự suy luận — đây là bước từ "game" sang "thuật toán tìm đường" trong khoa học máy tính.

Hướng mở rộng

Kiểm tra và hoàn thiện

  1. Robot có đứng đúng cửa vào, hướng vào trong không?
  2. Chạy thuật toán — robot có xuyên tường không? (giảm bước tiến hoặc tăng độ dày tường)
  3. Robot có đến vùng đích trên mê cung đơn giản?
  4. Thử mê cung phức tạp hơn — thuật toán vẫn thoát?
  5. Quay video ngắn robot tự giải mê cung — trình bày trước lớp.
⚠️ Lỗi thường gặp

Quên khôi phục hướng sau khi kiểm tra tường bên; bước tiến quá dài; màu tường không đồng nhất khiến chạm màu báo sai.

💡 Ghi nhớ

Thuật toán bám tường là ví dụ điển hình của heuristic — quy tắc đơn giản giải bài toán phức tạp. Cùng ý tưởng được dùng trong robot dọn nhà, xe tự hành và AI lập kế hoạch đường đi.